#ifndef GROUND_HPP
#define GROUND_HPP
#include "object.hpp"
#include <vector>
using namespace std;

/* @brief 地面类，可以放置一些物体在地面上（墙体这种不能放在地面上，只能独占一各）
 * 简单来说，地面就是可以放置很多非Solid东西的地方（生物不添加入地面，直接放在layermodel中）*/
class Ground : public Object{
public:
    Ground();
    void Add(Object* obj);
    void Remove(int idx);
    int Size() const;
    bool Empty() const;
    vector<Object*>& GetObjects();
    template <typename T>
    bool GetObjectOfType(ObjType type, vector<T>& objs){
        objs.clear();
        for(Object* o : _objects)
            if(o->GetType()==type)
                objs.push_back(dynamic_cast<T>(o));
        if(objs.empty())
            return false;
        return true;
    }
    void Draw() override;
private:
    vector<Object*> _objects;
};

#endif

